package com.hfb.mashibing.alip8.juc.c009;

import java.util.concurrent.TimeUnit;

/**
 * 一个同步方法可以调用另一个同步方法
 * 一个线程已经拥有某个对象的锁，再次申请的时候仍然会得到该对象的锁
 * 也就是说 synchronized 获得锁是可重入得
 *
 */
public class T {

    public synchronized void m() {
        System.out.println(Thread.currentThread().getName()+" m start...");
        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        n();
        System.out.println(Thread.currentThread().getName()+" m end...");
    }

    public synchronized void n() {
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+" n 被调用了");
    }

    public static void main(String[] args) {
        new TT().m();

    }
}

class TT extends T {
    @Override
    public synchronized void m() {
        System.out.println(Thread.currentThread().getName()+" child m start");
        super.m();
        System.out.println(Thread.currentThread().getName()+" child m end");
    }
}
